grammar/cgrammar/
grammar/jsgrammar/
grammar/pygrammar/
+grammar/gogrammar/
+grammar/javagrammar/
# Sublime Text
*.sublime-project
* Added filter log series by using a regular expressions. (issue #100)
+
+ * Fixed bug with long log values. (issue #102)
\ No newline at end of file
'''
import os
import sys
+sys.path.insert(0, '../../pyleri/')
from grammar import siri_grammar
encoding='utf-8') as f:
f.write(go_file)
- print('\nFinished creating new go-grammar file...\n')
\ No newline at end of file
+ print('\nFinished creating new go-grammar file...\n')
// should be used with the goleri module.
//
// Source class: SiriGrammar
-// Created at: 2018-06-22 15:10:04
+// Created at: 2018-06-29 17:12:20
import (
"regexp"
GidGroupColumns = iota
GidGroupMatch = iota
GidGroupName = iota
- GidHelp = iota
GidHelpAccess = iota
GidHelpAlter = iota
GidHelpAlterDatabase = iota
GidHelpRevoke = iota
GidHelpSelect = iota
GidHelpShow = iota
+ GidHelpStmt = iota
GidHelpTimeit = iota
GidHelpTimezones = iota
GidIntExpr = iota
), goleri.NewToken(NoGid, ","), 0, 0, false),
)
timeitStmt := goleri.NewRepeat(GidTimeitStmt, kTimeit, 1, 1)
+ helpStmt := goleri.NewRef()
+ START := goleri.NewSequence(
+ GidSTART,
+ goleri.NewOptional(NoGid, timeitStmt),
+ goleri.NewOptional(NoGid, goleri.NewChoice(
+ NoGid,
+ false,
+ selectStmt,
+ listStmt,
+ countStmt,
+ alterStmt,
+ createStmt,
+ dropStmt,
+ grantStmt,
+ revokeStmt,
+ showStmt,
+ calcStmt,
+ helpStmt,
+ )),
+ goleri.NewOptional(NoGid, rComment),
+ )
helpAccess := goleri.NewKeyword(GidHelpAccess, "access", false)
helpAlterDatabase := goleri.NewKeyword(GidHelpAlterDatabase, "database", false)
helpAlterGroup := goleri.NewKeyword(GidHelpAlterGroup, "group", false)
helpShow := goleri.NewKeyword(GidHelpShow, "show", false)
helpTimeit := goleri.NewKeyword(GidHelpTimeit, "timeit", false)
helpTimezones := goleri.NewKeyword(GidHelpTimezones, "timezones", false)
- help := goleri.NewSequence(
- GidHelp,
+ helpStmt.Set(goleri.NewSequence(
+ NoGid,
kHelp,
goleri.NewOptional(NoGid, goleri.NewChoice(
NoGid,
helpTimeit,
helpTimezones,
)),
- )
- START := goleri.NewSequence(
- GidSTART,
- goleri.NewOptional(NoGid, timeitStmt),
- goleri.NewOptional(NoGid, goleri.NewChoice(
- NoGid,
- false,
- selectStmt,
- listStmt,
- countStmt,
- alterStmt,
- createStmt,
- dropStmt,
- grantStmt,
- revokeStmt,
- showStmt,
- calcStmt,
- help,
- )),
- goleri.NewOptional(NoGid, rComment),
- )
+ ))
return goleri.NewGrammar(START, regexp.MustCompile(`^[a-z_]+`))
}
from pyleri import List
from pyleri import Optional
from pyleri import Prio
+from pyleri import Ref
from pyleri import Regex
from pyleri import Repeat
from pyleri import Sequence
timeit_stmt = Repeat(k_timeit, 1, 1)
+ help_stmt = Ref()
+
+ START = Sequence(
+ Optional(timeit_stmt),
+ Optional(Choice(
+ select_stmt,
+ list_stmt,
+ count_stmt,
+ alter_stmt,
+ create_stmt,
+ drop_stmt,
+ grant_stmt,
+ revoke_stmt,
+ show_stmt,
+ calc_stmt,
+ help_stmt,
+ most_greedy=False)),
+ Optional(r_comment))
+
+ help_stmt = Sequence(k_help) # Dummy
+
def _set_attribute(cls, name, value):
setattr(cls, name, value)
if structure:
for child_path, child in structure.items():
_walk(cls, child_path, child)
- value = Sequence(*[getattr(cls,
- 'k_' + path[-1],
- Keyword(path[-1])), Optional(
- Choice(*[
- getattr(cls, '_'.join(p)) for p in structure.keys()]))])
+
+ opt = Optional(Choice(*[
+ getattr(cls, '_'.join(p)) for p in structure.keys()]))
+
+ value = Sequence(*[getattr(
+ cls,
+ 'k_' + path[-1],
+ Keyword(path[-1])), opt])
else:
value = Keyword(path[-1])
except AttributeError:
import sys
sys.exit(1)
else:
- _set_attribute(cls, name, value)
+ if name != 'help':
+ _set_attribute(cls, name, value)
+ else:
+ # Replace the ref element
+ cls.help_stmt._element = value
def _build_help(cls):
_walk(cls, path, structure)
_build_help(SiriGrammar)
-_set_attribute(SiriGrammar, 'START', Sequence(
- Optional(SiriGrammar.timeit_stmt),
- Optional(Choice(
- SiriGrammar.select_stmt,
- SiriGrammar.list_stmt,
- SiriGrammar.count_stmt,
- SiriGrammar.alter_stmt,
- SiriGrammar.create_stmt,
- SiriGrammar.drop_stmt,
- SiriGrammar.grant_stmt,
- SiriGrammar.revoke_stmt,
- SiriGrammar.show_stmt,
- SiriGrammar.calc_stmt,
- SiriGrammar.help,
- most_greedy=False)),
- Optional(SiriGrammar.r_comment)))
-
siri_grammar = SiriGrammar()
* should be used with the libcleri module.
*
* Source class: SiriGrammar
- * Created at: 2018-06-22 15:10:04
+ * Created at: 2018-06-29 17:09:17
*/
#ifndef CLERI_EXPORT_SIRI_GRAMMAR_GRAMMAR_H_
#define CLERI_EXPORT_SIRI_GRAMMAR_GRAMMAR_H_
CLERI_GID_GROUP_COLUMNS,
CLERI_GID_GROUP_MATCH,
CLERI_GID_GROUP_NAME,
- CLERI_GID_HELP,
CLERI_GID_HELP_ACCESS,
CLERI_GID_HELP_ALTER,
CLERI_GID_HELP_ALTER_DATABASE,
CLERI_GID_HELP_REVOKE,
CLERI_GID_HELP_SELECT,
CLERI_GID_HELP_SHOW,
+ CLERI_GID_HELP_STMT,
CLERI_GID_HELP_TIMEIT,
CLERI_GID_HELP_TIMEZONES,
CLERI_GID_INT_EXPR,
#define F_OFFSET CLERI_GID_F_COUNT
/* help statements */
-#define HELP_OFFSET CLERI_GID_HELP
+#define HELP_OFFSET CLERI_GID_HELP_ACCESS
#define HELP_COUNT CLERI_GID_HELP_TIMEZONES + 1 - HELP_OFFSET
* should be used with the libcleri module.
*
* Source class: SiriGrammar
- * Created at: 2018-06-22 15:10:04
+ * Created at: 2018-06-29 17:09:17
*/
#include "siri/grammar/grammar.h"
), cleri_token(CLERI_NONE, ","), 0, 0, 0)
);
cleri_t * timeit_stmt = cleri_dup(CLERI_GID_TIMEIT_STMT, k_timeit);
+ cleri_t * help_stmt = cleri_ref();
+ cleri_t * START = cleri_sequence(
+ CLERI_GID_START,
+ 3,
+ cleri_optional(CLERI_NONE, timeit_stmt),
+ cleri_optional(CLERI_NONE, cleri_choice(
+ CLERI_NONE,
+ CLERI_FIRST_MATCH,
+ 11,
+ select_stmt,
+ list_stmt,
+ count_stmt,
+ alter_stmt,
+ create_stmt,
+ drop_stmt,
+ grant_stmt,
+ revoke_stmt,
+ show_stmt,
+ calc_stmt,
+ help_stmt
+ )),
+ cleri_optional(CLERI_NONE, r_comment)
+ );
cleri_t * help_access = cleri_keyword(CLERI_GID_HELP_ACCESS, "access", CLERI_CASE_SENSITIVE);
cleri_t * help_alter_database = cleri_keyword(CLERI_GID_HELP_ALTER_DATABASE, "database", CLERI_CASE_SENSITIVE);
cleri_t * help_alter_group = cleri_keyword(CLERI_GID_HELP_ALTER_GROUP, "group", CLERI_CASE_SENSITIVE);
cleri_t * help_show = cleri_keyword(CLERI_GID_HELP_SHOW, "show", CLERI_CASE_SENSITIVE);
cleri_t * help_timeit = cleri_keyword(CLERI_GID_HELP_TIMEIT, "timeit", CLERI_CASE_SENSITIVE);
cleri_t * help_timezones = cleri_keyword(CLERI_GID_HELP_TIMEZONES, "timezones", CLERI_CASE_SENSITIVE);
- cleri_t * help = cleri_sequence(
- CLERI_GID_HELP,
+ cleri_ref_set(help_stmt, cleri_sequence(
+ CLERI_NONE,
2,
k_help,
cleri_optional(CLERI_NONE, cleri_choice(
help_timeit,
help_timezones
))
- );
- cleri_t * START = cleri_sequence(
- CLERI_GID_START,
- 3,
- cleri_optional(CLERI_NONE, timeit_stmt),
- cleri_optional(CLERI_NONE, cleri_choice(
- CLERI_NONE,
- CLERI_FIRST_MATCH,
- 11,
- select_stmt,
- list_stmt,
- count_stmt,
- alter_stmt,
- create_stmt,
- drop_stmt,
- grant_stmt,
- revoke_stmt,
- show_stmt,
- calc_stmt,
- help
- )),
- cleri_optional(CLERI_NONE, r_comment)
- );
+ ));
cleri_grammar_t * grammar = cleri_grammar(START, "^[a-z_]+");
siriparser_listen_enter[CLERI_GID_GRANT_USER] = enter_grant_user;
siriparser_listen_enter[CLERI_GID_GROUP_COLUMNS] = enter_xxx_columns;
siriparser_listen_enter[CLERI_GID_GROUP_MATCH] = enter_group_match;
- siriparser_listen_enter[CLERI_GID_HELP] = enter_help;
+ siriparser_listen_enter[CLERI_GID_HELP_STMT] = enter_help;
siriparser_listen_enter[CLERI_GID_LIMIT_EXPR] = enter_limit_expr;
siriparser_listen_enter[CLERI_GID_LIST_STMT] = enter_list_stmt;
siriparser_listen_enter[CLERI_GID_MERGE_AS] = enter_merge_as;
static void enter_help(uv_async_t * handle)
{
+ LOGC("Enter!!");
siridb_query_t * query = (siridb_query_t *) handle->data;
cleri_node_t * node = query->nodes->node;
{
siridb_query_t * query = (siridb_query_t *) handle->data;
+ LOGC("HERE....");
+
if (query->data != NULL)
{
#if DEBUG
assert (query->packer == NULL);
#endif
-
+ LOGC("HERE1....%u", query->nodes->node->cl_obj->gid);
const char * help = siri_help_get(
query->nodes->node->cl_obj->gid,
(const char *) query->data,
if (help == NULL)
{
+ LOGC("HERE2....");
siridb_query_send_error(handle, CPROTO_ERR_QUERY);
return;
}